QPSQL: Add support for PostgreSQL 12
authorDebian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
Thu, 27 Feb 2020 13:52:19 +0000 (13:52 +0000)
committerDmitry Shachnev <mitya57@debian.org>
Thu, 27 Feb 2020 13:52:19 +0000 (13:52 +0000)
Origin: upstream, https://code.qt.io/cgit/qt/qtbase.git/commit/?id=14b61d48e8bad622
Last-Update: 2019-10-20

Gbp-Pq: Name postgresql_12.diff

src/plugins/sqldrivers/psql/qsql_psql.cpp
src/plugins/sqldrivers/psql/qsql_psql_p.h

index 7ad9db1ea8568ba37c83fb24f348d9c37a15b404..2955eeee18b8caea581233877b49621ec15b3c68 100644 (file)
@@ -1062,8 +1062,10 @@ static QPSQLDriver::Protocol qMakePSQLVersion(int vMaj, int vMin)
         return QPSQLDriver::Version10;
     case 11:
         return QPSQLDriver::Version11;
+    case 12:
+        return QPSQLDriver::Version12;
     default:
-        if (vMaj > 11)
+        if (vMaj > 12)
             return QPSQLDriver::UnknownLaterVersion;
         break;
     }
@@ -1438,26 +1440,29 @@ QSqlRecord QPSQLDriver::record(const QString& tablename) const
     else
         schema = std::move(schema).toLower();
 
-    QString stmt = QLatin1String("select pg_attribute.attname, pg_attribute.atttypid::int, "
-                                 "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, "
-                                 "pg_attrdef.adsrc "
-                                 "from pg_class, pg_attribute "
-                                 "left join pg_attrdef on (pg_attrdef.adrelid = "
-                                 "pg_attribute.attrelid and pg_attrdef.adnum = pg_attribute.attnum) "
-                                 "where %1 "
-                                 "and pg_class.relname = '%2' "
-                                 "and pg_attribute.attnum > 0 "
-                                 "and pg_attribute.attrelid = pg_class.oid "
-                                 "and pg_attribute.attisdropped = false "
-                                 "order by pg_attribute.attnum");
-    if (schema.isEmpty())
-        stmt = stmt.arg(QLatin1String("pg_table_is_visible(pg_class.oid)"));
-    else
-        stmt = stmt.arg(QString::fromLatin1("pg_class.relnamespace = (select oid from "
-                                            "pg_namespace where pg_namespace.nspname = '%1')").arg(schema));
+    const QString adsrc = protocol() < Version8
+        ? QStringLiteral("pg_attrdef.adsrc")
+        : QStringLiteral("pg_get_expr(pg_attrdef.adbin, pg_attrdef.adrelid)");
+    const QString nspname = schema.isEmpty()
+        ? QStringLiteral("pg_table_is_visible(pg_class.oid)")
+        : QStringLiteral("pg_class.relnamespace = (SELECT oid FROM "
+                         "pg_namespace WHERE pg_namespace.nspname = '%1')").arg(schema);
+    const QString stmt =
+        QStringLiteral("SELECT pg_attribute.attname, pg_attribute.atttypid::int, "
+                       "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, "
+                       "%1 "
+                       "FROM pg_class, pg_attribute "
+                       "LEFT JOIN pg_attrdef ON (pg_attrdef.adrelid = "
+                       "pg_attribute.attrelid AND pg_attrdef.adnum = pg_attribute.attnum) "
+                       "WHERE %2 "
+                       "AND pg_class.relname = '%3' "
+                       "AND pg_attribute.attnum > 0 "
+                       "AND pg_attribute.attrelid = pg_class.oid "
+                       "AND pg_attribute.attisdropped = false "
+                       "ORDER BY pg_attribute.attnum").arg(adsrc, nspname, tbl);
 
     QSqlQuery query(createResult());
-    query.exec(stmt.arg(tbl));
+    query.exec(stmt);
     while (query.next()) {
         int len = query.value(3).toInt();
         int precision = query.value(4).toInt();
index 7e1849d857546c76991f1d35db318ad65df0ae94..e3b8ab80a8e136b327edeef319a1a68433233776 100644 (file)
@@ -93,6 +93,7 @@ public:
         Version9_6 = 22,
         Version10 = 23,
         Version11 = 24,
+        Version12 = 25,
         UnknownLaterVersion = 100000
     };